﻿/*
 * Created by SharpDevelop.
 * User: CeCi
 * Date: 28/03/2014
 * Time: 07:36 p.m.
 * 
 * To change this template use Tools | Options | Coding | Edit Standard Headers.
 */
using System;
using System.Data;
using System.Data.OleDb;
using Gestión_UTN.Entities;

namespace Gestión_UTN.daimpl
{
    /// <summary>
    /// Description of ciudaddaimpl.
    /// </summary>
    public class ciudaddaimpl : Gestión_UTN.da.ciudadda
    {
        public ciudaddaimpl()
        {
        }

        public bool SaveCiudad(int codPostal, string nombre, int prov_id)
        {
            bool ingresada = false;

            OleDbConnection conex = null;
            OleDbTransaction trans = null;

            try
            {
                conex = util.Conexion.conectarAccess();
                trans = null;

                if (null != conex)
                {

                    string sql = "INSERT INTO ciu_ciudades(ciu_codPostal, ciu_nombre, prov_id)" +
                                "VALUES(@ciu_codPostal, @ciu_nombre, @prov_id)";

                    conex.Open();
                    trans = conex.BeginTransaction();

                    OleDbCommand insertar = new OleDbCommand(sql, conex, trans);

                    insertar.Parameters.AddWithValue("@ciu_codPostal", codPostal);
                    insertar.Parameters.AddWithValue("@ciu_nombre", nombre);
                    insertar.Parameters.AddWithValue("@prov_id", prov_id);

                    insertar.ExecuteNonQuery();

                    trans.Commit();

                    ingresada = true;

                    conex.Close();
                }

            }
            catch (Exception ex)
            {
                ingresada = false;
                trans.Rollback();
                conex.Close();

                throw new exceptions.daexception(ex.Message);
            }

            return ingresada;
        }

        public bool DeleteCiudad(int codPostal)
        {
            bool eliminada = false;

            OleDbConnection conex = null;
            OleDbTransaction trans = null;

            try
            {
                conex = util.Conexion.conectarAccess();
                trans = null;

                if (null != conex)
                {

                    string sql = "DELETE FROM ciu_ciudades WHERE ciu_codPostal = @ciu_codPostal";

                    conex.Open();

                    trans = conex.BeginTransaction();

                    OleDbCommand eliminar = new OleDbCommand(sql, conex, trans);

                    eliminar.Parameters.AddWithValue("@ciu_codPostal", codPostal);

                    eliminar.ExecuteNonQuery();

                    trans.Commit();

                    eliminada = true;

                    conex.Close();
                }

            }
            catch (Exception ex)
            {
                eliminada = false;
                trans.Rollback();
                conex.Close();

                throw new exceptions.daexception(ex.Message);
            }

            return eliminada;
        }

        public bool ModifyCiudad(int codPostal_anterior, int codPostal, string nombre, int prov_id)
        {
            bool modificada = false;

            OleDbConnection conex = null;
            OleDbTransaction trans = null;

            try
            {
                conex = util.Conexion.conectarAccess();
                trans = null;

                if (null != conex)
                {

                    string sql = "UPDATE ciu_ciudades SET ciu_codPostal = @ciu_codPostal," +
                                    " ciu_nombre = @ciu_nombre, prov_id = @prov_id " +
                                    "WHERE ciu_codPostal = @ciu_codPostal_anterior";

                    conex.Open();
                    trans = conex.BeginTransaction();

                    OleDbCommand modificar = new OleDbCommand(sql, conex, trans);

                    modificar.Parameters.AddWithValue("@ciu_codPostal", codPostal);
                    modificar.Parameters.AddWithValue("@ciu_nombre", nombre);
                    modificar.Parameters.AddWithValue("@prov_id", prov_id);
                    modificar.Parameters.AddWithValue("@ciu_codPostal_anterior", codPostal_anterior);

                    modificar.ExecuteNonQuery();

                    trans.Commit();

                    modificada = true;

                    conex.Close();
                }

            }
            catch (Exception ex)
            {
                modificada = false;
                trans.Rollback();
                conex.Close();

                throw new exceptions.daexception(ex.Message);
            }

            return modificada;
        }

        public System.Data.DataTable FindAllCiudades()
        {
            DataTable tablaCiudades = null;

            OleDbConnection conex = null;

            try
            {
                conex = util.Conexion.conectarAccess();
                tablaCiudades = new DataTable();

                if (null != conex)
                {

                    string sql = "SELECT ciu_codPostal, ciu_nombre, prov_nombre" +
                                    " FROM ciu_ciudades ciu, prov_provincias prov " +
                                    "WHERE ciu.prov_id = prov.prov_id";

                    OleDbDataAdapter adaptador = new OleDbDataAdapter(sql, conex);

                    conex.Open();

                    adaptador.Fill(tablaCiudades);

                    conex.Close();
                }
            }
            catch (Exception ex)
            {
                tablaCiudades = null;
                conex.Close();

                throw new exceptions.daexception(ex.Message);
            }

            return tablaCiudades;
        }

        public Entities.Ciudad FindCiudadByCodPostal(int codPostal)
        {
            Ciudad ciudad = null;

            OleDbConnection conex = null;

            try
            {
                conex = util.Conexion.conectarAccess();

                if (null != conex)
                {

                    string sql = "SELECT ciu_codPostal, ciu_nombre, prov_id" +
                                    " FROM ciu_ciudades ciu" +
                                    " WHERE ciu_codPostal = @ciu_codPostal";



                    conex.Open();

                    OleDbCommand consulta = new OleDbCommand(sql, conex);

                    consulta.Parameters.AddWithValue("@ciu_codPostal", codPostal);

                    OleDbDataReader lector = consulta.ExecuteReader();

                    while (lector.Read())
                    {
                        int cp = Convert.ToInt32(lector[0].ToString());
                        string nombre = lector[1].ToString();
                        int prov_id = Convert.ToInt32(lector[2].ToString());

                        ciudad = new Ciudad(cp, nombre, prov_id);
                    }

                    conex.Close();
                }

            }
            catch (Exception ex)
            {
                ciudad = null;
                conex.Close();

                throw new exceptions.daexception(ex.Message);
            }

            return ciudad;
        }

        public Ciudad FindCiudadByNombre(string nombre)
        {
            Ciudad ciudad = null;

            OleDbConnection conex = null;

            try
            {
                conex = util.Conexion.conectarAccess();

                if (null != conex)
                {

                    string sql = "SELECT ciu_codPostal, ciu_nombre, prov_id" +
                                    " FROM ciu_ciudades ciu" +
                                    " WHERE ciu_nombre = @ciu_nombre";

                    conex.Open();

                    OleDbCommand consulta = new OleDbCommand(sql, conex);

                    consulta.Parameters.AddWithValue("@ciu_nombre", nombre);

                    OleDbDataReader lector = consulta.ExecuteReader();

                    while (lector.Read())
                    {
                        int codPostal = Convert.ToInt32(lector[0].ToString());
                        string nom = lector[1].ToString();
                        int prov_id = Convert.ToInt32(lector[2].ToString());

                        ciudad = new Ciudad(codPostal, nom, prov_id);

                    }

                    conex.Close();
                }

            }
            catch (Exception ex)
            {
                ciudad = null;
                conex.Close();

                throw new exceptions.daexception(ex.Message);
            }

            return ciudad;
        }
    }
}
